﻿/*----------------------------------------------------------------
// Copyright (C) 2012 zhangqiang
// 版权所有。 
//
// 文件名：WindsorControllerFactory.cs
// 文件功能描述：利用Windsor来代替默认的控制器生成
//
// 
// 创建标识：2012-10-21 zhangqiang
//
// 修改标识：
// 修改描述：
//
//
//----------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Castle.MicroKernel;
using System.Web.Routing;

namespace WebPlatform.Windsor
{
    /// <summary>
    /// 利用Windsor来代替默认的控制器生成
    /// </summary>
    public class WindsorControllerFactory : DefaultControllerFactory
    {
        private readonly IKernel kernel;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="kernel">Windsor内核</param>
        public WindsorControllerFactory(IKernel kernel)
        {
            this.kernel = kernel;
        }

        /// <summary>
        /// 释放指定的控制器
        /// </summary>
        /// <param name="controller">要发布的控制器</param>
        public override void ReleaseController(IController controller)
        {
            kernel.ReleaseComponent(controller);
        
        
        
        }

        /// <summary>
        /// 检索指定请求上下文和控制器类型的控制器实例
        /// </summary>
        /// <param name="requestContext"> HTTP 请求的上下文，其中包括 HTTP 上下文和路由数据。</param>
        /// <param name="controllerType">控制器的类型</param>
        /// <returns>控制器实例</returns>
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
            {
                throw new HttpException(404, string.Format("控制器 '{0}' 不存在", requestContext.HttpContext.Request.Path));
            }
            return (IController)kernel.Resolve(controllerType);
        }
    }
}